package cac.fenjian.resource.AoTask.MsWorkbinMaterial.dao;

import cac.fenjian.resource.AoTask.MsAoMatchInfo.dto.MsAoMatchInfoDTO;
import cac.fenjian.resource.AoTask.MsWorkbinMaterial.dto.MsWorkbinMaterialDTO;
import cac.fenjian.resource.WmsDeliverPlan.dto.WmsDeliverPlanDTO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface MsWorkbinMaterialDao {

    //插入缓存物料箱信息
    public int inseartMsWorkbinMaterial(@Param("bean") MsWorkbinMaterialDTO msWorkbinMaterialIdDTO);

    //物料绑定缓存箱信息
    public int bindingMsWorkbinMaterial(@Param("bean")WmsDeliverPlanDTO wmsDeliverPlanDTO,@Param("wmsItemInventoryId")String wmsItemInventoryId,@Param("workbinCode")String workbinCode);

    //查询台账是否存在该交接单信息
    public String isDelivery(@Param("map") WmsDeliverPlanDTO wmsDeliverPlanDTO);


    public String searchItemName (String itemCode);

    //根据物料箱编码查询箱子中存储物料信息
    public List<HashMap> searchMsWorkbinMaterial(@Param("map")Map map);
    //根据物料箱编码查询箱子中存储物料信息 -v2.0
    public List<HashMap> searchWorkbinMaterialV2(@Param("workbinCode")String workbinCode,@Param("aoCode")String aoCode);

    //插入工作包信息
//    public int putToolCode (@Param("toolCode")String toolCode,@Param("bean") MsAoMatchInfoDTO MsAoMatchInfoDTO);
    //插入工作包信息 -V2.0
    public int putToolCode (@Param("toolCode")String toolCode,@Param("bean") HashMap MsAoMatchInfoDTO);

    //更新缓存箱信息
//    public int updateWorkbin(@Param("bean") MsAoMatchInfoDTO MsAoMatchInfoDTO);
    //更新缓存箱信息 -V2.0
    public int updateWorkbin(@Param("bean") HashMap MsAoMatchInfoDTO);
    //测试用
    String test(@Param("bean") HashMap MsAoMatchInfoDTO);


    public List<MsWorkbinMaterialDTO> searchMsToolMaterial(@Param("toolCode")String toolCode,@Param("func")String func);
    //查询将要放入工作包盘的物料信息
    public List<HashMap> prestoreMaterial(@Param("toolCode")String toolCode);

    //ll配送页面数据查询
    public Page<MsWorkbinMaterialDTO> searchByAoCode(@Param("bean") MsWorkbinMaterialDTO msWorkbinMaterialDTO,@Param("aoBarcode") String aoBarcode);

    /**
     * ---------------------------------
     * 工艺更改分拣功能数据库操作
     * ---------------------------------
     */
    //将未更改前的工具箱物料信息更新至原有缓存箱中
    public int updateItemQty(@Param("bean")MsWorkbinMaterialDTO dto);
    //根据工具包编码删除工具包中的存放的物料信息
    public int delByToolCode(@Param("toolCode")String toolCode);
    /**
     * ---------------------------------
     * 工作包拆包数据库操作
     * ---------------------------------
     */
    //根据物料识别码，工具箱编码查询需要拆包的物料信息
    public List<MsWorkbinMaterialDTO> searchUnpackingMaterial(@Param("toolCode")String toolCode);
    //根据需要拆包的物料信息，更新到对应的缓存箱中
    public int updateWorkbinCode(@Param("bean")MsWorkbinMaterialDTO dto,@Param("workbinCode")String workbinCode);
    //根据拆包的物料信息，更新对应工作包物料信息
    public int updateToolCode(@Param("bean")MsWorkbinMaterialDTO dto);
    //查询需要拆白的物料是否为全部拆包
    public int numItemQty(@Param("bean")MsWorkbinMaterialDTO dto);
    //根据工作包关系维护表，查询工作包对应工作包盘编码
    public List<String> searchToolCodeByPackageID(@Param("packageId")String packageId);
    //根据工作包盘编码，查询盘中物料对应的工作包盘。
    public List<String> searchWorkCodeByToolCode(@Param("toolCode")String toolCode);
    //根据工具包编码删除工具包中的存放的物料信息
    public int unpackDel(@Param("bean")MsWorkbinMaterialDTO dto);
    //拆包工艺更改状态
   // public int updateUnpackChangeType(@Param("bean")HashMap bean);
    //拆包工艺更改后，BILL物料清单表，标注已修改
    public int updateBillChangeZero(@Param("bean")MsWorkbinMaterialDTO dto);
    /**
     * 工作包拆包 yebo 数据库确认
     *
     * **/
    //更新缓存箱物料数量
    int updateDeleteAndRemoveWorkbinInfo(@Param("bean") HashMap bean);
    //拆包工艺更改状态
    int updateUnpackChangeType(@Param("bean")HashMap bean);
    int updateInventoryEngQty(@Param("map") HashMap map);

    /***
     * 工艺更改分拣 yebo
     * */
    int insertWorkBMaterial(@Param("map") HashMap map);
    int updateWorkBinMateralQty(@Param("map")HashMap map);
    int updateWmsITemInventory(@Param("map")HashMap map);
    /**
     * ---------------------------------
     * 工作包替换数据库操作
     * ---------------------------------
     */
    //根据工作包编码，查询工作包里的物料信息
    public List<MsWorkbinMaterialDTO> searchMaterialByToolCode(@Param("toolCode") String toolCode);
    //替换工作包编码
    public int updateItemCodeInt (@Param("oldToolCode") String oldToolCode,@Param("newToolCode") String newToolCode);

    //调用是否分拣完成存储过程
    int callIsSort(@Param("map") Map map);

    //分拣拆包，根据infoId查询物料占用id
    public List<HashMap> searchAllotmentIdByinfoId(@Param("macthInfoId")String macthInfoId);

    //分拣拆包，取消占用
    public int cancleAllotmentById(@Param("allotmenId")Object allotmenId);

    //矫正缓存箱数据
    int rightWorkbin(@Param("map") HashMap map);
    //就在缓存箱更配套表信息
    int clearMatchInfo(@Param("map") HashMap map);


    //查询缺件工作包数据
    List<HashMap> lackPackage(@Param("map") HashMap map);

    //分拣保存补叫箱子查询可用箱子
    List<HashMap> usableWorkbinQuery(@Param("map") HashMap map);

    List<HashMap> queryAoCodeByPackage(@Param("map") HashMap map);
    List<HashMap> queryBillByPackage(@Param("map") HashMap map);

    String callEmptyTool();

    //分拣保存查询货架
    Integer searchShelvesWorkbin(@Param("workbinCode") String workbinCode);

    //分拣保存补叫箱子创建新任务
    int reCallInfoTask(@Param("map") HashMap map);


    //查询工作包替换中符合条件的工作包
    List<HashMap> querySatisPackageList(@Param("map") HashMap map);
    List<HashMap> querySatisAoList(@Param("sourcePackageId") String sourcePackageId,@Param("targetPackageId") String targetPackageId);
    List<HashMap> querySatisMaterialList(@Param("sourcePackageId") String sourcePackageId,@Param("targetPackageId") String targetPackageId);

    List<HashMap> querySourceMatchBills(@Param("msTaskPackageId") String msTaskPackageId);

    List<HashMap> queryTargetMatchBill(@Param("targetMsTaskPackageId")String targetMsTaskPackageId,@Param("sourceMsTaskAoId") String sourceMsTaskAoId);

    int insertWorkpackageReplace(@Param("map") HashMap map);

    //工作包拆包查询分拣好并且缺件的工作包 父信息
    List<HashMap> queryLackPackage(@Param("map") HashMap map);

    List<HashMap> queryPackageTool(@Param("map") HashMap map);

    //工作包拆包查询分拣好并且缺件的工作包 子信息
    List<HashMap> queryLackPackageChild(@Param("map") HashMap map);


    //工作包拆包查询分拣好的工作包 父信息
    List<HashMap> queryFullPackage(@Param("map") HashMap map);

    //工作包拆包查询分拣好的工作包 子信息
    List<HashMap> fullPackageChild(@Param("map") HashMap map);

    //查询所有缺少的物料所在的工作包所在托盘
    List<HashMap> queryLackTool(@Param("map") HashMap map);

    //查询需要进行拆包的工作包所在的托盘
    List<HashMap> queryFullTool(@Param("map") HashMap map);

    //查询货架状态及巷道
    HashMap queryRowStatus(@Param("palletCode") String palletCode);

    //插入拆包临时表
    int insertRemovePackage(@Param("map") HashMap map);

    //查询返回数据
    HashMap queryRemoveMaterial(@Param("map") HashMap map);

    //判断托盘结束位是否是当前位置
    String isFinishPosition(@Param("palletCode") String palletCode);

    //更新工作包状态
    int updateLackPackage(@Param("map") HashMap map);

    //更新ao状态
    int updateLackAo(@Param("map") HashMap map);

    //更新缓存箱表FULL
    int updateFullWorkbin(@Param("map") HashMap map);

    //更新缓存箱表LACK
    int updateLackWorkbin(@Param("map") HashMap map);

    //更新info表 LACK
    int updateLackInfo(@Param("map") HashMap map);

    //更新info表 FULL
    int updateFullInfo(@Param("map") HashMap map);

    //查询工作包缺件状态
    String queryPackageState(@Param("map") HashMap map);

    //查询AO缺件状态
    String queryAoState(@Param("map") HashMap map);

    //判断当前工作包是否已配完
    Integer isPackageFinish(@Param("map") HashMap map);

    //将临时表中数据作废
    Integer updateRemove(@Param("map") HashMap map);

    //查询回库任务参数
    HashMap queryBackTask(@Param("map") HashMap map);

    //寻找缓存箱
    List<HashMap> queryWorkbin(@Param("map") HashMap map);

    //查找规则表
    int queryItemRule(@Param("map") HashMap map);

    //查找货架上空缓存箱
    List<String> queryEmptyWorkbin(@Param("workbinQty") Integer workbinQty);

    //查询当前有多少待执行的任务
    List<String> queryWaitTask(@Param("operationBit") String operationBit,@Param("taskNumTool") Integer taskNumTool);

    //查询是否是送往agv的托盘
    String queryAgvTool(@Param("map") HashMap map);

    //一键确认验证密码
    Integer confirmPassWord(@Param("map") HashMap map);

    List<HashMap> queryPackageTools(@Param("packageCode") String packageCode);

    int insertBigPartGkLog(@Param("map") HashMap map);

    HashMap checkPackageNumIsError(@Param("msAoMatchBillId") String msAoMatchBillId,@Param("outQty") int outQty);
}
